// https://leetcode.cn/problems/count-binary-substrings/
// Created by ade on 2022/8/12.
// 给定一个字符串 s，统计并返回具有相同数量 0 和 1 的非空（连续）子字符串的数量，并且这些子字符串中的所有 0 和所有 1 都是成组连续的。
//
// 重复出现（不同位置）的子串也要统计它们出现的次数。
// 输入：s = "00110011"
// 输出：6
// 解释：6 个子串满足具有相同数量的连续 1 和 0 ："0011"、"01"、"1100"、"10"、"0011" 和 "01" 。
// 注意，一些重复出现的子串（不同位置）要统计它们出现的次数。
// 另外，"001110011" 不是有效的子串，因为所有的 0（还有 1 ）没有组合在一起。
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Solution {
public:
    int countBinarySubstrings(string s) {
        int len = s.size();
        vector<int> res;
        int i = 0;
        for (; i < len - 1; i++) {
            int tmp = 1;
            while (s[i] == s[i + 1]) {
                tmp++;
                i++;
            }
            res.push_back(tmp);
        }
        if (i == len - 1) res.push_back({1});
        int sum = 0;
        for (int i = 1; i < res.size(); i++) {
            sum += min(res[i - 1], res[i]);
        }
        return sum;

    }
};

int main() {
    Solution so;
    string s = "101010";// 101 10
    auto res = so.countBinarySubstrings(s);
    cout << res << endl;
    return 0;
}